package com.xunge.controller;

import com.xunge.anno.Log;
import com.xunge.pojo.Emp;
import com.xunge.pojo.EmpQueryParam;
import com.xunge.pojo.PageResult;
import com.xunge.pojo.Result;
import com.xunge.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

@Slf4j
@RequestMapping("/emps")
@RestController
public class EmpController {
    @Autowired
    private EmpService empService;

    /**
     * 分页查询员工信息
     *
     * @param empQueryParam 分页查询参数，包含页码、每页条数等信息
     * @return 返回分页结果，包含员工信息列表和分页相关数据
     */
    @GetMapping
    public Result page(EmpQueryParam empQueryParam){
        // 记录分页查询请求参数的日志
        log.info("分页请求参数:{}" ,empQueryParam);

        // 调用服务层方法执行分页查询，并返回查询结果
        PageResult<Emp> pageResult = empService.page(empQueryParam);
        return Result.success(pageResult);
    }

    /**
     * 保存员工信息
     *
     * @param emp 待保存的员工信息，包括员工的基本数据
     * @return 返回保存结果，成功则返回成功信息
     */
    @Log
    @PostMapping
    public Result save(@RequestBody Emp emp){
        // 记录保存员工信息请求的日志
        log.info("保存信息：{}",emp);
        // 调用服务层方法保存员工信息
        empService.save(emp);
        return Result.success();
    }

    /**
     * 批量删除员工信息
     *
     * @param ids 需要删除的员工ID列表
     * @return 返回删除结果，成功则返回成功信息
     */
    @Log
    @DeleteMapping
    public Result delete(@RequestParam List<Integer> ids){
        // 记录批量删除请求的日志
        log.info("根据ID批量删除员工信息及其工作经历: {}",ids);
        // 调用服务层方法执行批量删除
        empService.delete(ids);
        return Result.success();
    }

    /**
     * 根据ID查询员工信息
     *
     * @param id 需要查询的员工ID
     * @return 返回查询结果，包括员工的详细信息
     */
    @GetMapping("/{id}")
    public Result  getInfo(@PathVariable Integer id){
        // 记录根据ID查询员工信息请求的日志
        log.info("根据ID查询员工信息: {}",id);
        // 调用服务层方法根据ID查询员工信息
        Emp emp =  empService.getById(id);
        return Result.success(emp);
    }

    /**
     * 根据ID修改员工信息
     *
     * @param emp 包含需要更新的员工信息，包括员工ID和修改后的数据
     * @return 返回修改结果，成功则返回成功信息
     */
    @Log
    @PutMapping
    public Result update(@RequestBody Emp emp){
        // 记录根据ID修改员工信息请求的日志
        log.info("根据ID修改员工信息：{}",emp);
        // 调用服务层方法执行修改操作
        empService.update(emp);
        return Result.success();
    }

    /**
     * 修改密码
     */
    @PostMapping("/password")
    public Result updatePassword(@RequestBody Map<String, String> passwordData) {
        log.info("修改密码请求：{}", passwordData);
        try {
            empService.updatePassword(passwordData);
            return Result.success("密码修改成功");
        } catch (Exception e) {
            log.error("修改密码失败：", e);
            return Result.error(e.getMessage());
        }
    }
    /**
     * 查询所有的员工
     */
    @GetMapping("/list")
    public Result list(){
        log.info("查询所有的员工数据");
        List<Emp> empList = empService.list();
        return Result.success(empList);
    }


}
